package org.acm.seguin.refactor.type;
import org.acm.seguin.parser.ast.ASTName;
import org.acm.seguin.parser.ast.SimpleNode;
import org.acm.seguin.parser.factory.NameFactory;
import org.acm.seguin.refactor.TransformAST;
import org.acm.seguin.summary.TypeSummary;
import org.acm.seguin.summary.query.GetTypeSummary;
/**
* This object traverses the syntax tree and renames the types. An old and a
* new value are provided.
*
*@author Chris Seguin
*@created October 23, 1999
*/
public class RenameTypeTransform extends TransformAST {
private ASTName oldName;
private ASTName newName;
private TypeSummary summary;
/**
* Constructor for the RenameTypeTransform object
*
*@param oldValue the old name
*@param newValue the new name
*@param init Description of Parameter
*/
public RenameTypeTransform(ASTName oldValue, ASTName newValue, TypeSummary init) {
oldName = oldValue;
newName = newValue;
summary = init;
}
/**
* Constructor for the RenameTypeTransform object
*
*@param oldPackageName the old package
*@param newPackageName Description of Parameter
*@param className Description of Parameter
*/
public RenameTypeTransform(String oldPackageName, String newPackageName, String className) {
newName = NameFactory.getName(newPackageName, className);
oldName = NameFactory.getName(oldPackageName, className);
summary = GetTypeSummary.query(oldPackageName, className);
}
/**
* Constructor for the RenameTypeTransform object
*
*@param oldPackageName the old package
*@param newValue the new name
*@param init Description of Parameter
*/
public RenameTypeTransform(String oldPackageName, ASTName newValue, TypeSummary init) {
newName = newValue;
oldName = new ASTName(0);
oldName.fromString(oldPackageName);
oldName.addNamePart(newName.getNamePart(newName.getNameSize() - 1));
summary = init;
}
/**
* Update the syntax tree
*
*@param root the root of the syntax tree
*/
public void update(SimpleNode root) {
RenameTypeVisitor rtv = new RenameTypeVisitor();
root.jjtAccept(rtv, new RenameTypeData(oldName, newName, summary));
}
}